export type OrderType = 'asc' | 'desc'

export enum StyleInjectPosition {
  First = 'first',
  Last = 'last',
  BeforeContent = 'before-content',
  Default = 'default',
}

export interface BadgeStyleConfig {
  type: string
  backgroundColor: string
  textColor: string
  borderColor: string
  defaultDisplay?: 'none' | 'inline-block'
  activeDisplay?: 'none' | 'inline-block'
}

export interface ApplyHeadingStyleOptions {
  timeout: number
  condition: boolean
}

export interface SelectorConfig {
  selectorType: 'id' | 'class'
  value: string
}

export interface ThemeFutureOptions {
  followButton?: boolean
  copyRightButton?: boolean
  options?: {
    followButtonClassName: string | undefined
  }
}

export interface DOMSelectorMap {
  [category: string]: {
    [element: string]: SelectorConfig
  }
}
/**
 * DOM 加载阶段类型定义
 */
export type DomReadyPhase
  = | 'document-start' // 尽早注入
    | 'document-body' // body 元素存在时
    | 'document-end' // DOMContentLoaded 时或之后
    | 'document-idle' // DOMContentLoaded 之后 (默认)
    | 'context-menu' // 通过上下文菜单触发
    | 'network-idle' // 网络空闲时 (高级选项)

/**
 * DOM 加载配置选项
 */
export interface DomReadyOptions {
  /**
   * 执行阶段 (默认 'document-idle')
   */
  phase?: DomReadyPhase

  /**
   * 如果 DOM 已经加载完成，是否立即执行回调 (默认 true)
   */
  runImmediately?: boolean

  /**
   * 超时时间 (毫秒)
   */
  timeout?: number

  /**
   * 超时回调
   */
  onTimeout?: () => void
}

/**
 * 编辑器选择器配置
 */
export interface EditorSelectorConfig {
  // 富文本编辑器容器类名
  richTextEditor: string
  // Markdown编辑器容器类名
  markdownEditor: string
}

/**
 * 图标格式类型
 */
export enum IconFormatType {
  dataUrl = 'data-url',
  svg = 'svg',
  cssUrl = 'css-url',
}

/**
 * 元素验证结果类型
 */
export interface ValidResultEntry {
  value: ValidResultType
  symbol: string
  color?: string
}

/**
 * 主题类型
 */
export enum ThemeType {
  LIGHT = 'light',
  DARK = 'dark',
  PINK = 'pink',
}

/**
 * 主题获取模式
 */
export enum ThemeSourceMode {
  INLINE = 'inline', // 从内联style属性获取
  COMPUTED = 'computed', // 从计算样式获取
  LOCAL_STORAGE = 'localStorage',
}

/**
 * 标题标签类型
 */
export type HeadingTag = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'
/**
 * 标题标签等级
 */
export type HeadingLevel = 1 | 2 | 3 | 4
/**
 * 标题标签样式
 */
export interface IHeadingStyle {
  className: string
}
